// Copyright (c) Appeon. All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. 
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.

using System;

namespace SnapObjects.Data
{
    internal class PocoStatefulModelFactory
    {
        public static IStatefulModel Create(
            Type modelType,
            ICompositeModelAccessor compositeModelAccessor,
            object model,
            ModelState modelState, ChangeTrackingStrategy changeTrackingStrategy)
        {
            var statefulModelType = typeof(PocoStatefulModel<>).MakeGenericType(
                                                new Type[] { modelType });

            return (IStatefulModel)Activator.CreateInstance(
                        statefulModelType,
                        new object[] { compositeModelAccessor, model, modelState, changeTrackingStrategy });
        }

        public static PocoStatefulModel<TModel> Create<TModel>(
            ICompositeModelAccessor<TModel> compositeModelAccessor,
            TModel originalModel,
            TModel currentModel,
            ChangeTrackingStrategy changeTrackingStrategy)
        {
            return new PocoStatefulModel<TModel>(compositeModelAccessor, originalModel, currentModel, changeTrackingStrategy);
        }
    }
}
